#pragma once

namespace SD_Tools
{
	enum SDHW_CONTROLKEY
	{
		SDHC_NONE = 0x0,
		SDHC_CTRL,
		SDHC_LCTRL,
		SDHC_RCTRL,
		SDHC_ALT,
		SDHC_LALT,
		SDHC_RALT,
		SDHC_SHIFT,
		SDHC_LSHIFT,
		SDHC_RSHIFT
	};

	enum SDHW_KEY
	{
		SDHK_NONE = 0x0,
		SDHK_A,
		SDHK_B,
		SDHK_C,
		SDHK_D,
		SDHK_E,
		SDHK_F,
		SDHK_G,
		SDHK_H,
		SDHK_I,
		SDHK_J,
		SDHK_K,
		SDHK_L,
		SDHK_M,
		SDHK_N,
		SDHK_O,
		SDHK_P,
		SDHK_Q,
		SDHK_R,
		SDHK_S,
		SDHK_T,
		SDHK_U,
		SDHK_V,
		SDHK_W,
		SDHK_X,
		SDHK_Y,
		SDHK_Z,
		SDHK_1,
		SDHK_2,
		SDHK_3,
		SDHK_4,
		SDHK_5,
		SDHK_6,
		SDHK_7,
		SDHK_8,
		SDHK_9,
		SDHK_0,
		SDHK_NUM1,
		SDHK_NUM2,
		SDHK_NUM3,
		SDHK_NUM4,
		SDHK_NUM5,
		SDHK_NUM6,
		SDHK_NUM7,
		SDHK_NUM8,
		SDHK_NUM9,
		SDHK_NUM0,
		SDHK_F1,
		SDHK_F2,
		SDHK_F3,
		SDHK_F4,
		SDHK_F5,
		SDHK_F6,
		SDHK_F7,
		SDHK_F8,
		SDHK_F9,
		SDHK_F10,
		SDHK_F11,
		SDHK_F12,
		SDHK_ESCAPE,
		SDHK_ADD,
		SDHK_MINUS,
		SDHK_BACKSPACE,
		SDHK_TAB,
		SDHK_ENTER,
		SDHK_PERIOD,
		SDHK_NUMMUL,
		SDHK_NUMSUB,
		SDHK_NUMADD,
		SDHK_NUMDIV,
		SDHK_NUMDECIMAL,
		SDHK_SPACE,
		SDHK_OEM_102,
		SDHK_PAUSE,
		SDHK_INSERT,
		SDHK_DELETE,
		SDHK_HOME,
		SDHK_END,
		SDHK_PGUP,
		SDHK_PGDN,
		SDHK_MButton1,
		SDHK_MButton2,
		SDHK_MButton3,
		SDHK_MButton4,
		SDHK_MButton5,
		SDHK_SCROLLUP,
		SDHK_SCROLLDN
	};

	struct KeyStruct
	{
		SDHW_CONTROLKEY KeyA;
		SDHW_KEY KeyB;
	};

	class HotkeyWrapper
	{
	private:
		void (*CallBack)(int Identifier);
		BYTE DirectInputArray[256];
		KeyStruct* HotKeys;
		int NumberOfHotkeys;
	public:
	private:
	public:
		HotkeyWrapper(int NumberOfHotkeys, UINT KeyDelay, UINT PressDelay, void (*Callback)(int Identifier));
		int AddHotkey(KeyStruct HotKey);
		void ModifyHotkey(KeyStruct NewHotkey, int Identifier);
		void DirectInput(BYTE* Keys);
		void Update();
	};
};





